package com.itttq.gen.model.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.itttq.gen.common.constant.Constants;
import com.itttq.gen.common.constant.StatusTypeEnums;
import com.itttq.gen.utils.StringUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

import java.util.Date;

/** 项目信息表 **/

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value="project")
public class ProjectPo implements Serializable {
    private static final long serialVersionUID = -85628737762199100L;

	/**
	 * IdType.ASSIGN_ID 默认雪花算法
	 * IdType.ASSIGN_UUID 不含中划线的UUID
	 * IdType.AUTO 指定主键使用数据库ID自增策略
	 * IdType.INPUT insert 前自行 set 主键值
	 * IdType.NONE 表示未设置主键类型（注解里等于跟随全局,全局里约等于 INPUT）
	 */
	@TableId(value = "id", type = IdType.AUTO)
	private Long id;
	/** 编码 */
	private String code;
	/** 主类编码 */
	@TableField(exist = false)
	private String applicationCode;
	/** 名称 */
	private String name;
	/** 服务端口号，默认：8080 */
	private Integer port;
	/** 日志文件地址 */
	private String logPath;
	/** 项目包路径：如 com.itttq.admin */
	private String packagePath;
	/** 描述 */
	private String description;

	/** 模型来源类型：1-数据库；2-SQL文件；3-SQL语句 */
	private StatusTypeEnums.SourceTypeEnums sourceType;
	/** sql地址或SQL语句。如果是SQL文件，则此字段为sql文件地址；如果是SQL语句类型，则此字段存储SQL语句 */
	private String sqlStatement;
	/** 数据库连接主机地址，如：127.0.0.1 */
	private String dbHost;
	/** 数据库名称 */
	private String dbName;
	/** 数据库密码 */
	private String dbPassword;
	/** 数据库端口号 */
	private Integer dbPort;
	/** 数据库用户名 */
	private String dbUsername;


	/** 是否启用Redis，1 - 启用；2 - 禁用，禁用后则不会加入Swagger相关 */
	private Integer redisEnable;
	/** Redis库，默认为0 */
	private Integer redisDb;
	/** Redis连接主机地址，如：127.0.0.1。如果为空则表明没有设置 */
	private String redisHost;
	/** Redis密码 */
	private String redisPassword;
	/** Redis端口号 */
	private Integer redisPort;

	/** 是否启用Swagger，1 - 启用；2 - 禁用，禁用后则不会加入Swagger相关 */
	private Integer swaggerEnable;

	/**
	 * 项目文件下载URL
	 */
	private String downloadUrl;

	/** 创建时间 */
	private Date createTime;
	/** 创建者ID */
	private Long creator;
	/** 创建者名称 */
	private String creatorName;
	/** 最后一次更新时间 */
	private Date updateTime;
	/** 更新人 */
	private Long updater;
	/** 更新人姓名 */
	private String updaterName;

	public void setCode(String code) {
		this.code = code;
		this.applicationCode = StringUtil.capitalize(StringUtil.hump4Underline(code.replaceAll(Constants.HORIZONTAL_LINE,Constants.UNDERSCORE)));
	}
}